package disruptor.event.handler;

import com.lmax.disruptor.EventHandler;
import com.lmax.disruptor.WorkHandler;
import disruptor.event.ValueEvent;

/**
 * @ClassName ValueEventHandler
 * @PackageName disruptor.event.handler
 * @projectName myThread
 * @Description TODO
 * @Author games
 * @Date 2025/9/8 下午5:15
 * @Version 1.0
 */

/**
 * 1. 简要解释两个接口的区别
 * EventHandler 和 WorkHandler 是 Disruptor 中两种不同的消费者接口，主要区别如下：
 * EventHandler<ValueEvent>：
 * 用于广播模式，每个事件会被所有注册的 EventHandler 处理
 * 方法签名包含序列号和是否为批次末尾的参数
 * 适用于需要多个消费者同时处理同一事件的场景
 * WorkHandler<ValueEvent>：
 * 用于工作池模式，每个事件只会被工作池中的一个消费者处理
 * 方法签名更简单，只包含事件对象
 * 适用于负载均衡场景，多个消费者分担处理任务
 *
 */
public  class ValueEventHandler implements EventHandler<ValueEvent>, WorkHandler<ValueEvent> {
    private final String name;

    public ValueEventHandler() {
        this.name = "DefaultConsumer";
    }

    public ValueEventHandler(String name) {
        this.name = name;
    }
    @Override
    public void onEvent(ValueEvent event) throws Exception {
        System.out.println(name + " 1 处理事件，值为: " + event.getValue());
        // 模拟处理时间
        Thread.sleep(100);
    }
    @Override
    public void onEvent(ValueEvent event, long sequence, boolean endOfBatch) {
        // 处理事件逻辑
        System.out.println(name + " 2 处理事件: " + event.getValue() + " (序列号: " + sequence + ")");
        try {
            Thread.sleep(100); // 模拟处理时间
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}
